package com.camera.handle.util;

import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.WString;
import org.apache.commons.lang3.StringUtils;

import java.util.ArrayList;
import java.util.List;

public class DnpPrinterUtils {

    public static int CUTTER_MODE_STANDARD = 0;  // 标准切割机操作
    public static int CUTTER_MODE_NONSCRAP = 1;  // 无废料切割机操作
    public static int CUTTER_MODE_2INCHCUT = 120;  // 2英寸切割操作
    public static int CUTTER_MODE_PANORAMA = 1000;  // 全景打印操作（打印件之间有白色边框）（*1） （*1） 受固件版本 01.20 或更高版本支持

    public static String DLIBRARY_PATH = "";  // 全景打印操作（打印件之间有白色边框）（*1） （*1） 受固件版本 01.20 或更高版本支持


    public static List<String> portNameList = new ArrayList<>();
    static {
        portNameList.add("USB002");
        portNameList.add("USB001");
        portNameList.add("USB003");
        portNameList.add("USB004");
        portNameList.add("USB005");
    }

    public interface DLibrary extends Library {
        //此处我的jdk版本为64位,故加载64位的Dll
        DLibrary INSTANCE = (DLibrary) Native.loadLibrary(DLIBRARY_PATH,DLibrary.class);
        //Dll2x64中定义的函数
        Long PortInitialize(WString LPWSTR);

        Long gfPortIgcnitialize(WString LPWSTR);

        Long GetFirmwVersion(Long lPortNum,WString LPSTR);

        Long CvInitialize(WString LPWSTR);
        Boolean SetCutterMode(Long lPortNum, int dwMode);
    }


    public static void main(String[] args) {
//        DLibrary dLibrary = DLibrary.INSTANCE;
//        Long usb002 = dLibrary.PortInitialize("USB002");
        String filePath = DnpPrinterUtils.DLibrary.class.getResource("").getPath().replaceFirst("/","").replaceAll("%20"," ")+"Cx2Stat64.dll";
        System.out.println(filePath);
//        Long usbPort = -1L;
//        for(String portName : portNameList){
//            if(StringUtils.isNotEmpty(portName)){
//                Long usbNamePort = DLibrary.INSTANCE.PortInitialize(new WString(portName));
//                if(usbNamePort!=-1&&usbNamePort!=4294967295L&&usbNamePort<700000){
//                    usbPort = usbNamePort;
//                    break;
//                }
//            }
//        }
//        if(usbPort>0L){
//            System.out.println("usbPort : " + usbPort);
//    //        Boolean b = dLibrary.SetCutterMode(usb001, 120);
//    //        String a = "";
//    //        Long l = dLibrary.GetFirmwVersion(usb002, a);
//    //        System.out.println("l : " + l + ",a:"+a);
//            Boolean b =  DLibrary.INSTANCE.SetCutterMode(usbPort, CUTTER_MODE_2INCHCUT);
//            System.out.println("SetCutterMode : " + b);
//        }

    }

}
